Checksums and Cyclic Redundancy Checks (CRCs) are methods used to verify the integrity of data by computing some extra bits and transmitting them along with the data. The receiver applies the same algorithm to regenerate the extra information and verify that it is correct.
A bad TCP checksum differs from a bad MAC level checksum in that the packet generated by the adapter appears to be correct, but the protocol section of the packet is corrupt. A MAC layer checksum will result in the packet being discarded, where a bad TCP checksum will processed by the stack and passed up to the associated TCP application.